package com.ssyan.singleton.type7;

/**
 * @author ssyan
 * @Description 懒汉式5- 静态内部类（利用JVM底层类装载时线程安全机制）
 *                      源码剖析：JVM底层的类的装载过程中利用了ClassLoader的loadClass方法，方法中使用了synchronized同步锁
 *              注意：静态内部类的特点：
 *                  1.不会随着外部类的初始化而加载
 *                  2.静态内部类被外部类调用时，只会被调用一次，且线程安全，，所以可以实现线程安全的懒加载
 *              优点：可以懒加载，效率高，线程安全，代码简单
 *              结果：建议使用
 * @create 2021/8/27 17:50
 * @Version 1.0
 */
public class SingletonTest07 {

    public static void main(String[] args) {
        Singleton instance = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance == instance2);//true
        System.out.println(instance.hashCode());
        System.out.println(instance2.hashCode());
    }
}

class Singleton {

    //1.构造器私有化，外部不能new
    private Singleton() {}

    //2.静态内部类，该类中有一个静态属性Singleton
    private static class SingletonInstance {
        private static final Singleton INSTANCE = new Singleton();
    }

    //3.提供一个 静态公有方法，当使用到该方法时，调用静态内部类的静态属性获得对象
    public static Singleton getInstance() {
        return SingletonInstance.INSTANCE;
    }
}
